package x.x.x;

import java.util.Date;


public class DateInSameDay {

    //一天24小时的毫秒数
    private static final long MILLISECOND_DAY = 86400000L;//60 * 60 * 24 * 1000
    //因为中国处在东八区,所以Date类的new Date(0)是从上午8点开始的
    private static final long MILLISECOND_EIGHTHOURS = 28800000L;//60 * 60 * 8 * 1000
    
    /**
     * 
     * 测试目的:判断两个日期是不是在同一天
     * 
     *@author hanxy17
     * 如修改方法体请自行修改作者信息
     * 当前作者只对自己编写内容负责
     *
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        //最简单的思路,通过Calendar类获得年月日,直接对比
        //本次准备采用,判断两个时间的ms,实际测试两个并没有什么差别
        
        System.err.println(SameDay(new Date(0), new Date(MILLISECOND_DAY-MILLISECOND_EIGHTHOURS)));
        
        System.err.println(SameDay(new Date(0), new Date(MILLISECOND_DAY-MILLISECOND_EIGHTHOURS-1)));
        
    }

    public static boolean SameDay(Date startDate,Date endDate){
        long startTime = startDate.getTime();
        long endTime = endDate.getTime();
        //首先要判断两个时间的差肯定要在一天之内
        if(startTime - endTime > MILLISECOND_DAY){
            return false;
        }
        //经简单测试,用移位优化过的计算并没有比直接除法快,所以直接用除法
        
        /*
         * 首先考虑身处东八区
         * 分别获得start和end距1970年1月1日8:00AM的天数
         * [-28800000L,86400000L-28800000L]是东八区的一天
         * [0,86400000L]是数学上的一天
         * 设:当东八区当前时间ms = x ;(x+8h)/24 = 数学上的day
         */
        
        long startDays = (startTime + MILLISECOND_EIGHTHOURS) / MILLISECOND_DAY;
        long endDays = (endTime + MILLISECOND_EIGHTHOURS) / MILLISECOND_DAY;
        long numb = endDays - startDays;
        System.err.println(new Date(startTime)+"\n"+new Date(endTime));
        return numb == 0;
    }
}
